package com.zf.experiment.annotation;

import com.zf.experiment.constants.BasicConstants;
import com.zf.experiment.enums.AccessLimitMode;

import java.lang.annotation.*;

/**
 * 通过Aop 使用redis进行限流 的自定义注解
 * @author Zhou Feng
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
@Inherited
public @interface AopAccessLimit {
    /**
     * 限流关键字 前缀
     */
    String prefix() default BasicConstants.ACCESS_LIMIT_PREFIX;

    /**
     * 统计时间 单位秒，小于等于0时不生效
     */
    int seconds() default 0;

    /**
     * 统计时间内的请求数量 ，小于0时不生效
     */
    int maxCount() default Integer.MAX_VALUE;

    /**
     * 限流策略，默认全局限流
     */
    AccessLimitMode mode() default AccessLimitMode.QPS;
}
